package com.newly.center.sys.service.dict.api;

import com.newly.common.base.entity.PageUtils;
import com.newly.common.base.entity.auth.ICurrentTenant;
import com.newly.common.base.entity.sys.dict.dto.CreateDictDto;
import com.newly.common.base.entity.sys.dict.dto.DictTypeDto;
import com.newly.common.base.entity.sys.dict.dto.UpdDictDto;
import com.newly.common.base.entity.sys.dict.po.DictPo;
import com.newly.common.base.entity.sys.dict.po.DictTypePo;
import com.newly.common.base.entity.sys.dict.vo.TenantDictVo;
import com.newly.common.base.entity.sys.dict.vo.UpdDictVo;

import java.util.List;

/**
 * @author gjm guan
 * @date 2021/11/9 16:29
 * @desc 字典业务接口
 */
public interface IDictService {

    /**
     * 参数键名查重
     * @param code
     * @return
     */
    boolean keyDuplicate(String code);

    /**
     * 根据id获取字典信息
     * @param id
     * @return
     */
    UpdDictVo queryDictById(Integer id);

    /**
     * 创建字典
     *
     * @param dictDto 字典数据
     * @return 创建成功返回true
     */
    boolean createDict(ICurrentTenant currentTenant, CreateDictDto dictDto);

    /**
     * 创建企业货物类型
     * @param goodType
     * @return
     */
    boolean createGoodType(ICurrentTenant currentTenant,String goodType);

    /**
     * 获取货物类型下拉框
     * @return
     */
    List<String> getGoodType();

    /**
     * 查询字典创建人
     *
     * @return List TenantDictVo.class
     */
    List<TenantDictVo> queryTenantOfCreateDict();

    /**
     * 查询字典列表
     *
     * @param keyword   关键字
     * @param offset    页码
     * @param limit     页数
     * @param startTime 创建开始时间
     * @param endTime   创建结束时间
     * @return List DictPo.class
     */
    PageUtils listDict(String keyword, Integer offset, Integer limit, String startTime, String endTime);

    /**
     * 获取全部字典列表
     * @param keyword
     * @param startTime
     * @param endTime
     * @return
     */
    List<DictPo> listAllDict(String keyword, String startTime, String endTime);

    /**
     * 通过id删除字典
     *
     * @param dictIds 字典id
     * @return 删除成功返回true
     */
    boolean removeDict(List<String> dictIds);

    /**
     * 修改字典
     *
     * @param dictDto 字典源数据
     * @return 修改成功返回true
     */
    boolean modifyDict(UpdDictDto dictDto);

    /**
     * 查询字典类型列表
     *
     * @param keyword   关键字
     * @param offset    页码
     * @param limit     页数
     * @param startTime 创建开始时间
     * @param endTime   创建结束时间
     * @return List DictTypePo.class
     */
    PageUtils listDictType(String keyword, Integer offset, Integer limit, String startTime, String endTime);

    /**
     * 查询字典类型
     *
     * @return List DictTypePo.class
     */
    List<DictTypePo> queryDictType();

    /**
     * 通过id删除字典类型
     *
     * @param dictTypeIds 字典类型id
     * @return 删除成功返回true
     */
    boolean removeDictType(List<String> dictTypeIds);

    /**
     * 创建字典类型
     *
     * @param dictTypeDto 字典类型源数据
     * @return 创建成功返回true
     */
    boolean createDictType(DictTypeDto dictTypeDto);

    /**
     * 修改字典类型
     *
     * @param dictTypeDto 字典类型源数据
     * @return 修改成功返回true
     */
    boolean modifyDictType(DictTypeDto dictTypeDto);

    /**
     * 刷新redis字典数据缓存
     */
    void refreshCache();

}
